package com.surekam.mnai.util;



/**
 * 字串操作的杂合静态函数 
 * TODO: 字串的格式化，参考  logback 的log 参数格式化。
 * @author Junqing.ch
 *
 */
public class StringUtil  extends  org.springframework.util.StringUtils{


    public static final String BLANK_SPACEES = "[ 	　]";

    /**
     *  不允许 new 实例。
     */
    private  StringUtil(){}
    

    /**
     * 如果一个字串为 null ,换为 ""， 以避免空指针异常。
     * @param s
     * @return
     */
    public static String deleteNull(String s) {
        return null == s ? "" : s;
    }

    
    /**
     * 如果一个String　为null 或者全为空字符，返回true.
     * @param s
     * @return
     */
    public static boolean isEmpty(String s){
    	if (s == null ) return true;
    	if (s.trim().length() == 0 ) return true;
    	if (s.replaceAll(BLANK_SPACEES, "").length() == 0 ) return true;
    	return false;
    }
    
    public static boolean isNotEmpty(String s){
    	return ! isEmpty(s);
    }
    
    
/*
 * 取得文件的扩展名。
 *     * @param fname
     * @return
     */
    public static String getFileExt(String fname){
    	if (fname.indexOf(".") > 0 )
    		return fname.substring(fname.lastIndexOf('.'));
    	else 
    		return "";
    }
    

    /**
	 *  对在页面中输出的文本内容进行 HTML转换，使其符合HMLT的格式，并能显示特殊字符
	 * */
    public static final String htmlFormat(String src){
        if (src == null || src.length() == 0 )
            return "&nbsp;";
         char toCompare;
         StringBuffer  replaceChar = new StringBuffer(src.length()+256);
         int maxLength = src.length();
         try{
             for (int i = 0;i <maxLength;i++){
                 toCompare = src.charAt(i);
                 if (toCompare == '"')
                     replaceChar.append("&quot;");
                 else if (toCompare == '<')
                     replaceChar.append("&lt;");
                 else if (toCompare == '>')
                     replaceChar.append("&gt;");
                 else if (toCompare == '&'){
                     if (i < maxLength-1)
                         if (src.charAt(i+1) =='#'){
                             replaceChar.append("&#");
                             i++;
                         }
                         else
                             replaceChar.append("&amp;");
                 }
                 else if (toCompare == ' ')
                     replaceChar.append("&nbsp;");
                 else if (toCompare == '\r')
                     ;//replaceChar.append("<br>");
                 else if (toCompare == '\n')
                     replaceChar.append("<br>");
                 else
                     replaceChar.append(toCompare);
             }//end for
         }catch(Exception e){
             System.out.println(e.getMessage());
         } 
         return replaceChar.toString();
    }
	

	/**
	 *  对页面中的标题或需要定长显示的字符串进行格式化，使其适合于在给定的长度内显示，
	 *  长度超过时，显示为"ssssss..."
	 * */
	public static String fixLengFomart(String srcTitle,int outputLength){
		String result = srcTitle;
		try{
			while (result.getBytes().length > outputLength){
				result = result.substring(0,result.length()-1);
			}
			if (srcTitle.length() > result.length())
				result = result + "...";
		}catch(Exception e){
		}
		return result;
	}
	
	
    /**将通用的将字串解析为  boolean ，如果 字符串为空 ，则为false 
     * @param str
     * @return
     */
    public static boolean parseBoolean(String str) {
        return parseBoolean(str, false);
    }

    /**
     * 将通用的将字串解析为  boolean , 如 y yes ,true , on  1 为 true 
     * @param str   解析的字符串
     * @param whenBlank  如果字符串为空时的默认值 
     * @return true if string matches to Y, YES, TRUE, ON, 1 - case insensitive
     */
    public static boolean parseBoolean(String str, boolean whenBlank) {
        return (isEmpty(str) ? whenBlank : (str.toUpperCase().equals("Y") ||
                str.toUpperCase().equals("YES") ||
                str.toUpperCase().equals("TRUE") ||
                str.toUpperCase().equals("ON") ||
                str.toUpperCase().equals("1")));
    }
    
    /**
     * 在每行前加空格缩进
     * @param str 
     * @param indent 行前加空格的个数
     * @return indented 格式化后的字串。
     */
    public static String blockIndent(String str, int indent) {
        if (str == null) {
            return null;
        }
        StringBuilder buildIndent = new StringBuilder("");
        for (int n = 0; n < indent; n++) {
            buildIndent.append(' ');
        }
        String indentBlock = buildIndent.toString();
        StringBuilder result = new StringBuilder();
        String[] lines = str.split("\n");
        for (String line : lines) {
            result.append(indentBlock);
            result.append(line);
            result.append('\n');
        }
        return result.toString();
    }
    
    /**
     * 字串调个个  反向
     * @param str
     * @return
     */
    public static String reverse(String str) {
        char[] ac = new char[str.length()];
        for (int n = 0; n < str.length(); n++) {
            ac[n] = str.charAt(str.length() - 1 - n);
        }
        return new String(ac);
    }
    
    
	
}
